#include "iteradorbmas.h"

template<class Key, class Record>
IteradorBMas<Key, Record>::IteradorBMas(ArbolBMas<Key, Record>& arbol, Key clave) : arbol(arbol), nodo(arbol.raiz) {
    while (! nodo.isLeave()){
        u_int32_t pos = nodo.getDescendant(clave);
        nodo = this->arbol.leerNodo(pos);
    }

    for (it = nodo.getRecords().begin(); it != nodo.getRecords().end(); ++it) {
        if ((*it).getKey() >= clave)
            break;
    }
}

template<class Key, class Record>
Nullable<Record> IteradorBMas<Key, Record>::siguiente() {
    Nullable<Record> next;

    if (it == nodo.getRecords().end()){
        if (nodo.getRightNode() == 0)
            return next;
        nodo = arbol.leerNodo(nodo.getRightNode());
        it = nodo.getRecords().begin();
    }
    next.set((*it).getData());
    it++;
    return next;
}

